home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / qbprog.EXE / KEYCODE1.ZIP / KEYCODES.BAS next >
BASIC Source File  |  1991-10-26  |  5KB  |  173 lines

  1. ' KeyCodes.BAS   Gary D. Moore  911026
  2. '
  3. ' Example code for QuickBASIC 4.5 and PDS 7.1 to determine specific Key,
  4. '  or combination of Keys pressed.  KeyCodes.BAS can be run in QB or QBX.
  5. '
  6. ' I have created the "subs" to show how easy it is to adapt this code
  7. '  to your programs.  It is NOT a sample of "proper" coding.  It is a
  8. '  sample of how you can use certain key presses (or combinations) in your
  9. '  code.
  10. '
  11. ' WARNING:  Ctrl+F11, Ctrl+F12, Alt+F11, Alt+F12 CRASHED 'QBX' and caused
  12. '           an 'error' in my KeyCodes.EXE.  Therefore, DO NOT USE THESE
  13. '           in your programs.
  14.  
  15. 'My "normal" opening
  16. CLEAR
  17. CLOSE
  18. WIDTH 80
  19. SCREEN 0
  20. KEY OFF
  21. LOCATE , , 0           'turn-off cursor
  22.  
  23. 'UnRemark this if you want to write a text file of Key Presses
  24. 'F1% = FREEFILE: OPEN "KEYS.TXT" FOR OUTPUT AS F1%: WFile% = 1
  25.  
  26. Clr$ = SPACE$(79)             'Easy way to clear a Line
  27.  
  28. BProg:
  29. COLOR 7, 0
  30. CLS
  31. COLOR 14, 0
  32. L$ = "Key (Scan) Codes Example Program by Gary D. Moore 1991"
  33. Rw% = 1: GOSUB CLn
  34. COLOR 7, 0
  35. L$ = "Press a Key, Function Key, Cursor Key, or Combination of Keys"
  36. Rw% = 3: GOSUB CLn
  37.  
  38. NGetKey:
  39. Key$ = ""
  40. X$ = ""
  41. COLOR 7, 0
  42. LOCATE 5, 1: PRINT Clr$;
  43. LOCATE 23, 1: PRINT Clr$;
  44. 'clear the line for F1 key press in this demo
  45. IF X% = 15104 THEN LOCATE 10, 1: PRINT Clr$;
  46.  
  47. COLOR 14, 0
  48. LOCATE 5, 2: PRINT "---->"
  49. COLOR 7, 0
  50.  
  51. 'wait for a key press
  52. DO
  53.  X$ = INKEY$
  54. LOOP UNTIL X$ <> ""
  55.  
  56. 'The CVI command converts a two-byte string to an interger value
  57. X% = CVI(X$ + CHR$(0))        'Determine "scancode" from Key(s) press(ed)
  58.  
  59. 'Determine if user wants to quit
  60. IF X% = 27 THEN
  61.  L$ = "Do you want to quit (Y/N)?": GOSUB CLn
  62.  LOCATE 23, CN%: PRINT L$;
  63.  Q$ = INPUT$(1)
  64.  Q$ = UCASE$(Q$)
  65.  LOCATE 23, 1: PRINT Clr$;
  66.  IF ASC(Q$) = 89 THEN CLOSE : END
  67. END IF
  68.  
  69. GOSUB KeyPress
  70.  
  71. 'show key press
  72. COLOR 15, 0
  73. LOCATE 5, 9
  74. PRINT "You pressed ";
  75. 'color the Key$
  76. COLOR 14
  77. PRINT Key$
  78. COLOR 15
  79. 'some keys Line Feed the Scan Code, so force it to display on same line
  80. LOCATE 5, 40
  81. PRINT USING " Scan Code: ######"; X%
  82.  
  83. IF WFile% = 1 THEN                 'Write to FILE if UnRemarked above
  84.  PRINT #F1%, "Key: "; Key$;
  85.  PRINT #F1%, TAB(20); USING "  Scan Code: ######"; X%
  86. END IF
  87.  
  88. 'A timer routine could also be used instead
  89. COLOR 14, 0
  90. L$ = "Press <Enter> to Continue": GOSUB CLn
  91. LOCATE 23, CN%: PRINT L$;
  92. X$ = INPUT$(1)
  93. X$ = ""
  94. IF X% = 12 GOTO BProg      'Ctrl-L is Form Feed -- it clears the screen
  95. GOTO NGetKey   'Loop back for another key press (a do-loop would work here)
  96.  
  97. 'Subs ********
  98.  
  99. 'Center the Line
  100. CLn:
  101. CN% = 40 - (LEN(L$) / 2)
  102. IF Rw% THEN LOCATE Rw%, CN%: PRINT L$
  103. Rw% = 0
  104. RETURN
  105.  
  106. ' A 'few' of the multitude of Key Presses.
  107. ' This program can be 'run' from inside QBX (PDS 7.1), therefore,
  108. '  other scancodes can be added to this list with ease (i.e. Alt+Character,
  109. '  Ctrl+Character, etc. and etc.)
  110. KeyPress:
  111. SELECT CASE X%
  112.   'Function keys
  113.   CASE 15104
  114.    Key$ = "F1"
  115.    COLOR 0, 7
  116.    L$ = " You pressed the F1 Key ": Rw% = 10: GOSUB CLn
  117.    COLOR 7, 0
  118.   CASE 15360: Key$ = "F2"
  119.   CASE 15616: Key$ = "F3"
  120.   CASE 15872: Key$ = "F4"
  121.   CASE 16128: Key$ = "F5"
  122.   CASE 16384: Key$ = "F6"
  123.   CASE 16640: Key$ = "F7"
  124.   CASE 16896: Key$ = "F8"
  125.   CASE 17152: Key$ = "F9"
  126.   CASE 17408: Key$ = "F10"
  127.   'The negatives makes it EASY to code, e.g. IF X% < 0 THEN  'do something
  128.   ' But, not ALL key boards have these.
  129.   CASE -31488: Key$ = "F11"
  130.   CASE -31232: Key$ = "F12"
  131.   'Cursor keys
  132.   CASE 18176: Key$ = "Home"
  133.   CASE 18432: Key$ = "Up Arrow " + CHR$(24)
  134.   CASE 18688: Key$ = "Page Up"
  135.   CASE 19200: Key$ = "Left Arrow " + CHR$(27)
  136.   CASE 19712: Key$ = "Right Arrow " + CHR$(26)
  137.   CASE 20224: Key$ = "End"
  138.   CASE 20480: Key$ = "Down Arrow " + CHR$(25)
  139.   CASE 20736: Key$ = "Page Down"
  140.   CASE 20992: Key$ = "Ins"
  141.   CASE 21248: Key$ = "Del"
  142.   'this is a very unique press, but Num Lock has to be OFF
  143.   CASE 19456: Key$ = "No. 5 on Key Pad"
  144.   'Shift + Function key
  145.   CASE 21504: Key$ = "Shift+F1"
  146.   'Alt + Character key  SEE *WARNING* at top about Alt+F11 & Alt+F12
  147.   CASE 4096: Key$ = "Alt+Q"
  148.   CASE 7680: Key$ = "Alt+A"
  149.   CASE 11264: Key$ = "Alt+Z"
  150.   CASE 11520: Key$ = "Alt+X"
  151.   CASE 26624: Key$ = "Alt+F1"
  152.   CASE 30720: Key$ = "Alt+1"
  153.   'Ctrl + Character key can be confusing, so use these for 'special' cases
  154.   CASE 1: Key$ = "Ctrl+A"
  155.   ' thru
  156.   CASE 26: Key$ = "Ctrl+Z"
  157.   'Crtl + Function key  SEE *WARNING* at top about Ctrl+F11 & Ctrl+F12
  158.   CASE 24064: Key$ = "Ctrl+F1"
  159.   'Normal keys
  160.   CASE 8: Key$ = "BackSpace"
  161.   CASE 9: Key$ = "Tab"
  162.   CASE 13: Key$ = "Enter"
  163.   CASE 27: Key$ = "Esc"
  164.   CASE 32: Key$ = "Space"
  165.   CASE 3840: Key$ = "Shift Tab"
  166.   'Display ASCII characters associated with a Key Press for 'normal' keys
  167.   CASE ELSE: IF X% < 256 THEN Key$ = CHR$(X%) ELSE Key$ = " "
  168. END SELECT
  169. 'show Ctrl Key combinations w/ ASCII character
  170. IF LEN(Key$) > 1 AND X% < 256 AND X% > 0 THEN Key$ = Key$ + " "+CHR$(X%)
  171. RETURN
  172.  
  173.